API Gateway のアクセスログを Kinesis 経由で S3 に保管してみた
はじめに
アノテーション株式会社の hato です。
API Gateway のアクセスログは、出力先として CloudWatch Logs の他に Kinesis Data Firehose も選択できます。 今回は Kinesis Data Firehose 経由でアクセスログを S3 に保管する設定でやってみます。
API コールのログの Kinesis Data Firehose への記録 - Amazon API Gateway
アクセスログでは、CloudWatch または Kinesis Data Firehose のいずれかのみを有効にできます。両方を有効にすることはできません。ただし、実行ログで CloudWatch を有効にし、アクセスログで Kinesis Data Firehose を有効にすることはできます。
やってみた
前提
- 出力先のバケットは作成済み
- API Gateway には次の固定値を返却する Mock エンドポイントをデプロイ済み
{ "message": "Hello, world!" }
手順
- Kinesis Data Firehose の作成
- API Gateway の設定
- テスト
1. Kinesis Data Firehose の作成
Kinesis コンソールを開き「Kinesis Data Firehose」を選択した状態で「配信ストリームを作成」をクリックします。
次の値を指定します。
- ソース:
Direct PUT
- 送信先:
Amazon S3
配信ストリーム名にamazon-apigateway-
(例:amazon-apigateway-hato-firehose
)から始める名前を選択します。
API Gatewayに指定する場合は、必ずamazon-apigateway-
で始まる名前にする必要があります。
「S3 バケット」に出力先となるバケット名を指定して「配信ストリームを作成」をクリックします。
次の手順で必要になるため配信ストリームの ARN をメモします。
2. API Gateway の設定
API Gateway コンソールを開き、取得対象の API をクリックします。
ステージ -> 変更対象のステージ -> 「ログ」タブの順にクリックします。
「Access Log Destination ARN」にメモした ARN を入力し、ログの形式を選択したら「変更を保存」をクリックします。
ログ設定の更新だけであれば再デプロイは必要はありませんので、テストに移ります。
ステージ設定、ログ、またはステージ変数を更新するときに API を再デプロイする必要はありません。
3. テスト
API Gateway に curl でリクエストを実行して、
$ curl "https://abcdef123.execute-api.us-west-2.amazonaws.com/test" { "message": "Hello, world!" }
しばらく待つと、指定したバケットにログが記録されます。
なお、Kinesis Data Firehose でバッファされるため、リクエストからログが記録されるまで、5分程度掛かることがあります。
Amazon Kinesis Data Firehose データ配信ストリーム - Amazon Kinesis Data Firehose
Amazon S3 へのデータ配信の頻度は、配信ストリームで設定した Amazon S3 の [Buffer size (バッファサイズ)] および [Buffer interval (バッファ間隔)] の値によって決まります。
必要に応じてバッファの設定変更や、ログの圧縮もご検討ください。
送信先設定 - Amazon Kinesis Data Firehose
最後に
この記事が誰かのお役にたてば幸いです。
参考資料
- API コールのログの Kinesis Data Firehose への記録 - Amazon API Gateway
- Amazon Kinesis Data Firehose 配信ストリームの作成 - Amazon Kinesis Data Firehose
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。